package com.xyzwps.example.stream;

public sealed interface Parcel<T> {

    static <T> Parcel.Done<T> done() {
        return new Parcel.Done<>();
    }

    static <T> Parcel.Failure<T> failed(Throwable t) {
        return new Parcel.Failure<>(t);
    }

    static <T> Parcel.Delivery<T> deliver(T value) {
        return new Parcel.Delivery<>(value);
    }

    record Done<T>() implements Parcel<T> {
    }

    record Failure<T>(Throwable cause) implements Parcel<T> {

    }

    record Delivery<T>(T value) implements Parcel<T> {
    }
}
